package com.tarena.lbs.basic.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tarena.lbs.basic.dao.repository.AreaRepository;
import com.tarena.lbs.basic.pojo.po.AreaPO;
import com.tarena.lbs.basic.pojo.vo.AreaVO;
import com.tarena.lbs.basic.service.AreaService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.List;
import java.util.stream.Collectors;

@Service
@Slf4j
public class AreaServiceImpl implements AreaService {
    @Autowired
    private AreaRepository areaRepository;

    @Override
    public List<AreaVO> getAreaList(Integer parentId) {
        log.debug("查询父ID为{}的区域列表", parentId);
        // 创建查询条件，根据parentId查询
        QueryWrapper<AreaPO> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id", parentId);
        // 查询数据库获取PO列表
        List<AreaPO> areaPOList = areaRepository.selectList(queryWrapper);
        // 将PO列表转换为VO列表并返回
        return areaPOList.stream()
                .map(po -> {
                    AreaVO vo = new AreaVO();
                    BeanUtils.copyProperties(po, vo);
                    return vo;
                })
                .collect(Collectors.toList());
    }

    @Override
    public List<AreaVO> tree() {
//        log.debug("开始构建区域树形结构");
//        // 1. 查询所有区域数据
//        QueryWrapper<AreaPO> queryWrapper = new QueryWrapper<>();
//        List<AreaPO> allAreaPOs = areaRepository.selectList(queryWrapper);
//        // 2. 转换为VO列表
//        List<AreaVO> allAreaVOs = allAreaPOs.stream().map(po -> {
//                    AreaVO vo = new AreaVO();
//                    BeanUtils.copyProperties(po, vo);
//                    return vo;
//                })
//                .collect(Collectors.toList());
//        // 3. 构建ID到VO的映射，便于快速查找子节点
//        Map<Integer, AreaVO> areaMap = new HashMap<>();
//        for (AreaVO allAreaVO : allAreaVOs) {
//            if (areaMap.put(Math.toIntExact(allAreaVO.getId()), allAreaVO) != null) {
//                throw new IllegalStateException("Duplicate key");
//            }
//        }
//        // 4. 构建树形结构（假设顶级节点的parentId为0）
//        List<AreaVO> rootNodes = allAreaVOs.stream()
//                .filter(vo -> vo.getParentId().equals(0))
//                .collect(Collectors.toList());
//
//        // 5. 为每个节点设置子节点
//        for (AreaVO vo : allAreaVOs) {
//            Long parentId = vo.getParentId();
//            AreaVO parentVO = areaMap.get(parentId);
//            if (parentVO != null) {
//                // 确保子节点列表已初始化（需要在AreaVO中添加children字段及getter/setter）
//                if (parentVO.getChildren() == null) {
//                    parentVO.setChildren(new ArrayList<>());
//                }
//                parentVO.getChildren().add(vo);
//            }
//        }
//        return rootNodes;
//    }
        return null;
    }
}
